約 3,416,396 件
https://w.atwiki.jp/oblivionfaq/pages/35.html
Q:Wrye Bashって何? A:ModとSavefileを管理するツールです。詳しくはこちら
https://w.atwiki.jp/burumods/pages/9.html
ここは自作Modの解説をします。 現在制作中のModはNew Items Mod(仮)です。 今後名前が変わる可能性があります。 New Items Modを配布したら他のModも作る予定です。
https://w.atwiki.jp/dw2_iyaku/pages/111.html
クラウザー飛び越えMod(HD版) クラウザーで道の切れ端を飛び越えることが出来るようになります。(教会脇の道と水車のあるステージまでは確認しました。) Download:(625Kb) 導入方法 ダウンロードしたファイルを解凍してpl0a.udasファイルをResident Evil 4/BIO4/Emフォルダに入れる。 Emフォルダ内のpl0a.udas.lfsをpl0a.uds.lfs$$$など適当にリネームする。
https://w.atwiki.jp/oblivion1/pages/121.html
Miscarcand遺跡 指定された遺跡「Miscarcand」まで行き、Great Welkynd Stoneを取ってCloud Ruler TempleのMartinの元まで戻る。遺跡内の敵はゾンビと骸骨、ゴブリン系。 不死モンスターとゴブリンは敵対関係にあるので、勝手に戦ってくれるがゴブリン系はそれほど強くないので漁夫の利と言えるほど有利にはならない。 Lv25でも敵はGoblinとか骨とかHeadlessZombieとかその辺がメインで楽勝。 上記を参考にやってみたが、自分の場合は体力の自然回復する強力なゾンビに苦しんだ。楽勝どころではなかったよ。 Dread Zombie等の体力回復能力のある敵の処理がキャラタイプによっては困難な可能性が有。更にMagicka回復が出来なくなる病気も与えてくるので結構厄介 力押しで回復力を上回るダメージを叩き込めれば良いが、そうでない場合、召還で一緒に削ったり、Weak Fireball等の持続的に炎属性ダメージ(*1)を与える魔法で回復能力を相殺する等工夫する必要がある 遺跡の奥まで辿り着き、Great Welkynd Stoneを取ると神殿の形が変化。「King of Miscarcand」(アンデッドのボスキャラ)とゾンビ数体が出現。ダンジョン自体はそれほど難しくはなく、今までプレイしてきたプレイヤーには楽な部類かと思われますが、こいつらはかなりの強敵です ボスはゾンビが出現する場所より遠くに出る(ゾンビ数体とはStoneを取った瞬間戦闘になる)ので、ゾンビから先に倒すのがポイント。 ボスは強く、周到な準備がないと苦戦は必至。特に電撃はプレイヤーのパラメーターにもよりますがヘルスの4分の3ほどダメージを与えてくる厄介な技です。他にもSilence効果を持つ魔法など、嫌らしい技を使ってきます。 Resist Shock、Fortify Healthと言ったポーションがあれば有利に戦いを進められるでしょう。またダンジョン内の雑魚からMagickaが回復しない病気を移される事があるので魔法やポーションで常時対応できるようにしておきましょう。 他に充分な量の回復薬も必須です。召還術スキルが高ければ、地形を活かして逃げ回り、召還獣に任せてしまうと言う手もあり。 ボスを倒すと鍵が拾えるので、それを活用するとショートカットで帰れます。 補足 PC版・Xbox360版双方で、遺跡のゲートが開かなくなるバグが確認されています。床や壁のボタンを押す前にセーブし、まずゲートを普通の扉と同じように開けようとしてください。"This gate is opend remotely"とメッセージが返ってきたら、その後でボタンを押します。メッセージが表示されない場合は正常に処理されていないので、ゲームを再起動してやりなおします。なお、同タイプの遺跡では似たようなバグが起る可能性があるようです。遺跡に入る前にセーブしておいたほうがいいでしょう。
https://w.atwiki.jp/minecrowft/pages/6.html
導入MOD このページではサーバーに導入しているMODの一覧と用途について説明しています。 サーバーに参加する方はここに書いてあるMODの導入が必須となります。 サーバーは常にMODの最新版を入れているわけではありません。バージョンも同様のものを探してください。 Minecraft Forge9.10.0.819 以下のMODを導入するための前提となるMOD。 詳しくはMinecraft Japan Wikiの専用解説ページを参照。 Biomes O Plenty0.6.0 80種以上のバイオームと新アイテム・ブロック・レシピを追加するMOD。 現実に近いバイオームからファンタジーの世界のようなバイオームまで色々ある。 詳しくはMinecraft Japan Wikiの専用解説ページを参照。 DungeonPackv2 空中・地上・ネザーに様々なダンジョンを形成するMOD。 固有Mobの追加は少ないが、特定のダンジョンにはボスモンスターが存在する。 詳しくはリンク先を参照。 竹MODuniversal 2.6.1.19 新植物として「竹」を追加するMOD。 竹を使った建材ブロックや料理・武器などを追加する他、浸かるとバフを得られる温泉や桜の木、いくつかの和風建築向けブロックを追加する。 詳しくはMinecraft Japan Wikiの専用解説ページを参照。 モミジMOD(MapleTree MOD)Forge v1.1.18a 紅葉樹と、降り積もった落ち葉を生成するMOD。 山岳・森林バイオームにのみ生成されるが、山岳バイオームでは大量に見かけるのに対し、森林バイオームでは極希にしか生成されない。 詳しくはリンク先を参照。 UsefulFood1.4.4 サンドイッチやカボチャスープ、ゆで卵などバニラの雰囲気を壊さないオーソドックスな料理を多数追加する。 羊は羊肉、イカはゲソをそれぞれドロップするようになる(もちろん食用)など、今思えば極当たり前のことも行える。 詳しくはリンク先を参照。 導入検討中MOD 以下は現在導入を検討している又は、競合やエラーによって導入を一時的に取りやめているMODである。 LotsOMobs(エラー) いまひとつ愛嬌に欠けるMobを追加するMOD。 鹿・熊・ウサギやペンギンなど、動物が中心となる。 詳しくはリンク先を参照。
https://w.atwiki.jp/wastelandpunkjp/pages/19.html
概要 装備作成のときに使用すると、追加でステータスを付与できるアイテム。 装備によって一度に使用できるModの数が違う。 入手方法は敵からのドロップ、アリーナショップ、ジョブの報酬。 Mod1つにつき付与されるステータスは確定(1)+ランダム(2)の計3つとなっている。 このランダム枠がいかに重要なステータスに割り振られるかが重要となる。 以下はModのリスト 知覚 体力 筋力 テクニック 物理耐性 炎耐性 毒耐性 スピード ランダム(Chloe's Mod、"クロエのMod")。固定枠(0)+ランダム(3)。 ニューエイジ(New Age)。現在ある唯一の金品質。体力(1)+ランダム(2)。 ランダムのみクラフト可能。ランダム以外を入手するのはゲーム終盤なので、まずはランダムでいいステータスを狙ってみよう。
https://w.atwiki.jp/citrusmodserver/pages/16.html
MOD名 分類 説明 URL 備考 MineAll 一括破壊 ツルハシで破壊できるブロックを、より広範囲に破壊できるようになる。ON/OFFのキー(デフォルト)はM ダウンロード CutAll 一括破壊 斧で破壊できるブロックを、より広範囲に破壊できるようになる。ON/OFFのキー(デフォルト)はC ダウンロード DigAll 一括破壊 シャベルで破壊できるブロックを、より広範囲に破壊できるようになる。ON/OFFのキー(デフォルト)はG ダウンロード More Villagers 村人 村人に複数の職業が追加される。 ダウンロード Better Villages 村人 村の全体的な外観とレイアウトを改善し、新しいデザインの家が追加される。 ダウンロード ダウンロード
https://w.atwiki.jp/worldoftankmemo/pages/23.html
MOD 軽量化目的 (XVMなしで重いMODを使わない) XVM未使用時 6感 音なし 与ダメログ表示 なし 勝率表示 なし (ASIA 動作×) CAP詳細情報表示 なし ガレージ戦車複数段表示 なし 圧縮ファイルが実行ファイル(EXE)は使わない。 MEMO 0.9.3 (変更履歴) / MEMO 0.9.4 (変更履歴) / MEMO 0.9.5 (変更履歴) / MEMO 0.9.6 (変更履歴) / MEMO 0.9.7 (変更履歴) MEMO 0.9.8 (変更履歴) / MEMO 0.9.9 (変更履歴) / MEMO 0.9.10 (変更履歴) / MEMO 0.9.12 (変更履歴) / MEMO 0.9.13 (変更履歴) MEMO 0.9.14 (変更履歴) / MEMO 0.9.15 (変更履歴) / MEMO 0.9.18 (変更履歴)
https://w.atwiki.jp/oblivion1/pages/67.html
#freeze #nofollow #norelated naviで指定しているページは存在しません L [#o648e077] lastmod [#icd62a6b] links [#m5bbd018] list [#l9a47a57] lookup [#u9c3d366] ls [#b596a628] ls2 [#d2ce34ea] M [#cdfaaa0f] map [#i89f687e] md5 [#wec9aa1f] memo [#h2cba975] menu [#vc24ce14] N [#ge4daaa6] navi [#yd9441b2] new [#meab71a6] newpage [#lec55a94] nofollow [#s8c0fa4c] norelated [#uebd3c7c] L lastmod 種別 インライン型プラグイン 重要度 ★☆☆☆☆ 書式 2007年07月28日 (土) 19時28分52秒( [ ページ名 ] ); 概要 指定したページの最終更新日時を表示します。 引数 ページ名には最終更新日時を表示したいページ名を指定します。 省略時は設置したページとみなします。 links 種別 コマンド 重要度 ★★☆☆☆(管理者) 書式 ?plugin=links 概要 ページ間のキャッシュを更新します。通常使用する必要はありません。 メンテナンス作業などでページが記録されているファイルを直接操作した場合にキャッシュとページの記述内容の整合性がとれなくなるため、実行する必要があります。 備考 実行の際に管理者パスワードを要求されます。 list 種別 コマンド 重要度 ★★★★☆ 書式 ?cmd=list 概要 ページの一覧を表示します。 lookup 種別 (コマンド) ブロック型プラグイン 重要度 ★★★☆☆ 書式 #lookup( interwikiname [, ボタン名 [, 入力欄の初期値 ]] ) 概要 記述した位置にテキスト入力欄とボタンを表示します。任意の文字列を入力してボタンを押すと、interwikinameと入力値から生成したURLへ移動します。これによって、検索エンジンにクエリを送信したり、番号をタイプするだけで該当するアーカイブにアクセスすることなどが可能になります。 URLの生成にはInterWikiを利用します。このプラグインが生成するURLは、以下のようなInterWikiと同じです。InterWikiNameのページに、あらかじめURLの生成に使用するInterWikiNameを設定しておく必要があります。 [[interwikiname 入力欄の値]] 入力欄が空欄(空文字列)のときは、ボタンを押しても動作しません。必ず何らかの文字列を入力する必要があります。 引数 interwikiname InterWikiNameに設定した値の一つを指定します。 ボタン名 ボタンに表示するキャプションを指定します。省略時は lookup です。 入力欄の初期値 初期値を指定したい場合に記入します。省略時は空文字列になります。 プラグイン内設定 PLUGIN_LOOKUP_USAGE 引数未指定時に表示されるヘルプ ls 種別 ブロック型プラグイン 重要度 ★★☆☆☆ 書式 #ls( [ title ] ) 概要 記述したページより階層化されているページのページ名を一覧表示します。 引数 titleを指定した場合、ページ名に加えてタイトルを表示します。タイトルは各ページの一行目の内容を表示します。省略時はタイトルを表示しません。 備考 実際には、より高機能なls2を使用する機会が多いと思われます。 ls2 種別 (コマンド) ブロック型プラグイン 重要度 ★★★☆☆ 書式 #ls2( [[ パターン ] [, { [ title ], [ include ], [ reverse ], [ compact ], [ link ] } [, linkの別名表示 ] ]] ) 概要 指定したパターンで始まるページ名を一覧表示します。 引数 パターンには表示するページ名の共通部分を指定します。省略時は"設置したページ名/"となります。 title,include,reverse,compact,link で表示方法を指定します。 title − ページに含まれる見出し(*,**,***)の一覧を併記します。 include − 下位層のページが#includeを使用していた場合、includeしているページの一覧を表示します。 reverse − ページの並び順を反転し、名前の降順に表示します。省略すると名前の昇順に表示されます。 compact − 見出しレベルを調整します。 link − #ls2を書いた位置に一覧を表示する代わりにリンクを表示します。このリンクを選択すると別画面にページの一覧を表示するようにします。 linkの別名表示には、パラメータlinkを指定した際に表示される文字列の代わりの文字列を指定します。省略時は ... で始まるページの一覧となります。 プラグイン内設定 PLUGIN_LS2_ANCHOR_PREFIX 見出しアンカーの書式 PLUGIN_LS2_ANCHOR_ORIGIN 見出しアンカーの開始番号 PLUGIN_LS2_LIST_COMPACT compactオプション省略時、見出しレベルを調整するか 備考 ls プラグインとの違いについて。 階層化されたページの起点となるページが、lsでは記述したページ固定だが、ls2ではパラメータで指定できます。 titleパラメータを指定した場合に、lsでは「ページの一行目」が表示されるが、ls2では「見出しの一覧」を表示します。 include, link という表示オプションが追加されています。 ページ名のソートにはnatcasesort()を使っているため、昇順の場合、半角英数字よりも漢字の方が先に表示されます。 M map 種別 コマンド 重要度 ★☆☆☆☆ 書式 ?plugin=map [ refer=ページ名 ] [ reverse=true ] 概要 サイトマップの様にページ間のリンク関係を一覧表示します。 指定したページを起点に、リンクで辿れるページを全てツリー状に表示します。 引数 引数には一覧表示方法のオプションを指定します。 refer=ページ名 − 起点となるページを指定します。省略すると、サイトのトップページ(通常はFrontPage)が起点となります。 reverse=true − どこへリンクしているかではなく、どこからリンクされているかを一覧表示します。 どこからもリンクされていないページは、画面の後半にまとめて表示されます。 プラグイン内設定 PLUGIN_MAP_SHOW_HIDDEN 表示対象外のページをリストアップするかどうか md5 種別 コマンド 重要度 ★☆☆☆☆ 書式 ?plugin=md5 md5=文字列 概要 選択したパスワードの形式に応じて、pukiwiki.ini.php に保存する パスワード用文字列を出力します。 パスワードのフォーマットは以下の8種類の中から選択できます。 DESあるいはMD5アルゴリズムを利用したPHP crypt() および LDAP crypt (*1)、 MD5 アルゴリズムを利用したPHP md5()、LDAP MD5、およびLDAP SMD5(シードあり)、 SHA-1 アルゴリズムを利用したPHP sha()、LDAP SHA、および LDAP SSHA(シードあり) 備考 PukiWiki内で利用するパスワードは、パスワード文字列そのものの代わりに、 実際のパスワードから導出された文字列(セキュリティハッシュ)を保存することが可能です。 これは悪意ある者にpukiwiki.ini.phpの中身を覗き見られた場合に、 パスワードが安易に漏洩しない事を目的としたものです。 SHA-1 アルゴリズムを利用するためには、PHP 4.3.0 以降を使用するか mhash エクステンションを導入する必要があります。 プラグイン名に反してMD5以外のパスワードフォーマットも選択可能です。 これは従来、パスワードから導出したMD5ハッシュ値を利用していた経緯によるものです。 md5のプラグインを呼び出すURLの中にパスワードを含める利用方法は互換性のため残っていますが、推奨されません。 このプラグインは PKWK_SAFE_MODE ないし PKWK_READONLY の設定で無効化されます。 memo 種別 (コマンド) ブロック型プラグイン 重要度 ★☆☆☆☆ 書式 #memo 概要 記述した位置に複数行入力欄とボタンを表示します。 ボタンを押下すると入力欄の記述内容を更新します。 プラグイン内設定 MEMO_COLS 編集欄の表示桁数 MEMO_ROWS 編集欄の表示行数 備考 insertプラグインやarticleプラグインと似ていますが、入力した内容が入力欄の外へ出力されず、入力欄に留まる点が異なります。 個人用のメモ代わりにPukiWikiを利用している場合、未整理の情報を一時的に溜め込むのに便利です。 menu 種別 ブロック型プラグイン 重要度 ★★★★☆ 書式 #menu( ページ名 ) 概要 デフォルトのスキンにて、ページの左側にメニュー用のページ(MenuBar)を表示するために内部的に使用されています。 任意のページでブロック型プラグインとして使用すると、引数に指定したページをメニュー用ページに指定できます。 例えば通常はMenuBarを表示するサイトで、hogeというページだけはMenuBarの代わりにhogeMenuというページを表示したい場合、hogeというページに #menu(hogeMenu) と記述する事で実現できます。 ソース中のMENU_ENABLE_SUBMENU をTRUEとすると、表示中のページの上位階層のMenuBarか、同階層にあるMenuBarページをメニューとして表示するようになります。 例えば FrontPage, MenuBar, hoge, fuga, hoge/MenuBar, hoge/hoge というページが存在する場合は、FrontPage、fuga、MenuBar では MenuBar がメニューとして表示され、hoge, hoge/MenuBar, hoge/hogeでは hoge/MenuBar がメニューとして表示されます。 引数 メニュー用ページとして表示するページ名を指定します。 プラグイン内設定 MENU_ENABLE_SUBMENU サブメニューを使用するか MENU_SUBMENUBAR サブメニューを使用する場合にメニューとして呼び出されるページ名。デフォルトは MenuBar。 備考 デフォルトのメニュー用ページをMenuBar以外のページとする場合は、pukiwiki.ini.php の $menubar を変更して下さい。 N navi 種別 ブロック型プラグイン 重要度 ★★☆☆☆ 書式 #navi( [ 目次ページ ] ) 概要 DocBook風ナビゲーションバーを表示します。 目次となるページに下階層のページが存在する時、それら全てのページ(の先頭と末尾)に記述する事で Prev, Home, Next というリンクを表示します。これによって下階層のページを順に参照するのに便利になります。 引数 目次ページに順番に見て回るページの上階層にあたるページを指定します。 例えば hoge, hoge/1, hoge/2, hoge/3 というページが存在する場合、hoge/2に#navi(hoge)を記述するとhogeに移動するHomeというリンク、hoge/1に移動するPrevというリンク、hoge/3に移動するNextというリンクを表示します。 ページで最初に呼び出した場合はヘッダイメージのリンクを出力します。ページで2度目以降に呼び出された場合はフッタイメージのリンクを出力します。現在のページが目次ページである場合は対象となるページの一覧を表示します。 プラグイン内設定 PLUGIN_NAVI_EXCLUSIVE_REGEX 除外するページを正規表現で指定する PLUGIN_NAVI_LINK_TAGS link タグを出力するかどうか new 種別 インライン型プラグイン 重要度 ★★☆☆☆ 書式 書式1 ( [ nodate ] ){ 日付文字列 }; 書式2 ( [ ページ名 ] [, nolink ] ); 概要 指定した日時が最近であった場合、最近更新された事を強調表示します。日時の指定は直接日付時刻を記述する方法(書式1)と、指定したページ(群)の最終更新日時を採用する方法(書式2)の2通りがあります。 標準では5日以内の場合に New を、1日以内の場合に New! を表示します。期間や表示する文字列のパターンは設置者によってカスタマイズ可能です。 引数 書式1 日付文字列を指定した場合、その日時が規定の期間内であった場合に強調表示します。省略した場合はページの更新日時をチェックする記述であると見なされます。 nodate − 日付文字列を表示しません。省略時は表示します。 書式2 ページ名を指定した場合は、そのページの更新日時が規定の期間内であった場合に強調表示します。省略した場合は、プラグインを記述したそのページを指定したと見なします。 ページ名末尾が/であった場合、そのページ名で始まるページ群の中で最後の更新日時が規定の日付以内であった場合に強調表示します。 nolink − ページ名を表示しません。省略時はページ名(ページ群で指定した場合は最後に更新されたページ名)を表示します。 プラグイン内設定 PLUGIN_NEW_DATE_FORMAT 表示フォーマット 備考 日付文字列はPHP関数 strtotimeが認識できる書式である必要があります。 newpage 種別 コマンド ブロック型プラグイン 重要度 ★★★★★ 書式 ?plugin=newpage page=ページ名 refer=関連ページ名 #newpage( [ ページ名初期値 ] ) 概要 ページを新規作成するか、新規作成するページ名の入力欄を表示します。 引数 コマンド パラメータには新規作成するページのオプションを指定します。 ページ名には新規作成するページ名を指定します。省略時は新規作成するページ名の入力するためのページを表示します。ページ名はエンコードされている必要があります。 関連ページ名にはリンク元のページ名を指定します。新規作成するページの先頭に、ここで指定したページへのリンクが自動的に埋め込まれます。ページ名はエンコードされている必要があります。 ブロック型プラグイン ページ名初期値には新規作成するページ名を入力する入力欄に初期表示する文字列を指定します。 nofollow 種別 ブロック型プラグイン 重要度 ★☆☆☆☆ 書式 #nofollow 概要 記述したページが凍結されている場合、ヘッダーに「NOFOLLOW」「NOINDEX」オプションを追加させます。 これらのオプションは検索エンジンに対し「このページを無視して欲しい」と主張します。実際にどうなるのかは検索エンジン次第です。 備考 人間や、上記のオプションを無視するプログラムには効果がありません。 norelated 種別 ブロック型プラグイン 重要度 ★★★☆☆ 書式 #norelated 概要 ページ下部に表示される関連ページのリンクを非表示にします。 備考 極端に多くのページからリンクされていて関連リンクの表示が目障りである場合などに利用します。 naviで指定しているページは存在しません
https://w.atwiki.jp/akasatanahama/pages/126.html
概要 村人の職業を追加し、専用の家を村に生成させる。 ソースコード AluminiumMod.java package tutorial.aluminiummod; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.VillagerRegistry; import net.minecraft.block.Block; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.util.ResourceLocation; import net.minecraft.world.gen.structure.MapGenStructureIO; @Mod(modid = "AluminiumMod", name = "Aluminium Mod", version = "1.0.0") public class AluminiumMod { /** * 村人IDの宣言 * 0~4は既存の村人として設定されているため、使ってはいけない */ public static final int metalVillagerID = 334; //追加するアイテム・ブロックの宣言 public static Item aluminium; public static Block oreAluminium; //村人の宣言 @Mod.EventHandler public void preInit(FMLPreInitializationEvent event) { //アイテム・ブロックの実装 aluminium = new Item() .setCreativeTab(CreativeTabs.tabMaterials) .setUnlocalizedName("aluminium") .setTextureName("aluminiummod aluminium"); GameRegistry.registerItem(aluminium, "aluminium"); oreAluminium = new AluminiumOre() .setBlockName("oreAluminium") .setBlockTextureName("aluminiummod aluminium_ore"); GameRegistry.registerBlock(oreAluminium, "oreAluminium"); } @Mod.EventHandler public void init(FMLInitializationEvent event) { //村人IDの登録 VillagerRegistry.instance().registerVillagerId(metalVillagerID); //村人の登録 VillagerRegistry.instance().registerVillageTradeHandler(metalVillagerID, new AluminiumTrade()); if (FMLCommonHandler.instance().getSide().isClient()) { VillagerRegistry.instance().registerVillagerSkin(metalVillagerID, new ResourceLocation("aluminiummod textures/mobs/metal_villager.png")); } //村人生成の登録 VillagerRegistry.instance().registerVillageCreationHandler(new AluminiumVillageCreation()); //構造物の登録 MapGenStructureIO.registerStructure(AluminiumHouse.class, "AluminiumHouse"); MapGenStructureIO.func_143031_a(AluminiumHouse.class, "AluminiumHouse_"); } } AluminiumOre.java 鉱石の追加 と同様 AluminiumTrade.java package tutorial.aluminiummod; import cpw.mods.fml.common.registry.VillagerRegistry; import net.minecraft.entity.passive.EntityVillager; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.village.MerchantRecipe; import net.minecraft.village.MerchantRecipeList; import java.util.Random; public class AluminiumTrade implements VillagerRegistry.IVillageTradeHandler { //村人の交換を追加する @Override public void manipulateTradesForVillager(EntityVillager villager, MerchantRecipeList recipeList, Random random) { //アルミニウム一個をエメラルド一個と交換する recipeList.add(new MerchantRecipe(new ItemStack(AluminiumMod.aluminium, 1), new ItemStack(Items.emerald, 1))); //アルミニウム鉱石一個とエメラルド二個とアルミニウム一個を交換する recipeList.add(new MerchantRecipe(new ItemStack(AluminiumMod.oreAluminium, 1),new ItemStack(Items.emerald, 1) , new ItemStack(AluminiumMod.aluminium, 1))); } } AluminiumVillageCreation.java package tutorial.aluminiummod; import cpw.mods.fml.common.registry.VillagerRegistry; import net.minecraft.util.MathHelper; import net.minecraft.world.gen.structure.StructureVillagePieces; import java.util.List; import java.util.Random; public class AluminiumVillageCreation implements VillagerRegistry.IVillageCreationHandler { //その村人がどのくらいの頻度で生成されるかを決める @Override public StructureVillagePieces.PieceWeight getVillagePieceWeight(Random random, int i) { return new StructureVillagePieces.PieceWeight(getComponentClass(), 50, MathHelper.getRandomIntegerInRange(random, i, i + 1)); } //建築物のクラスを渡す @Override public Class ? getComponentClass() { return AluminiumHouse.class; } //建築物生成時に呼ばれる @Override public Object buildComponent(StructureVillagePieces.PieceWeight villagePiece, StructureVillagePieces.Start startPiece, List pieces, Random random, int p1, int p2, int p3, int p4, int p5) { return AluminiumHouse.func_74915_a(startPiece, pieces, random, p1, p2, p3, p4, p5); } } AluminiumHouse.java package tutorial.aluminiummod; import net.minecraft.block.material.Material; import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import net.minecraft.world.gen.structure.StructureBoundingBox; import net.minecraft.world.gen.structure.StructureComponent; import net.minecraft.world.gen.structure.StructureVillagePieces; import net.minecraftforge.common.ChestGenHooks; import java.util.List; import java.util.Random; import static net.minecraftforge.common.ChestGenHooks.VILLAGE_BLACKSMITH; public class AluminiumHouse extends StructureVillagePieces.Village { private boolean hasMadeChest; public AluminiumHouse() { } public AluminiumHouse(StructureVillagePieces.Start p_i2103_1_, int p_i2103_2_, Random p_i2103_3_, StructureBoundingBox p_i2103_4_, int p_i2103_5_) { super(p_i2103_1_, p_i2103_2_); this.coordBaseMode = p_i2103_5_; this.boundingBox = p_i2103_4_; } //構造物を生成するメソッド public boolean addComponentParts(World p_74875_1_, Random p_74875_2_, StructureBoundingBox p_74875_3_) { if (this.field_143015_k 0) { this.field_143015_k = this.getAverageGroundLevel(p_74875_1_, p_74875_3_); if (this.field_143015_k 0) { return true; } this.boundingBox.offset(0, this.field_143015_k - this.boundingBox.maxY + 6 - 1, 0); } //ブロックを指定した範囲内に敷き詰める this.fillWithBlocks(p_74875_1_, p_74875_3_, 0, 1, 0, 9, 4, 6, Blocks.air, Blocks.air, false); this.fillWithBlocks(p_74875_1_, p_74875_3_, 0, 0, 0, 9, 0, 6, Blocks.cobblestone, Blocks.cobblestone, false); this.fillWithBlocks(p_74875_1_, p_74875_3_, 0, 4, 0, 9, 4, 6, Blocks.cobblestone, Blocks.cobblestone, false); this.fillWithBlocks(p_74875_1_, p_74875_3_, 0, 5, 0, 9, 5, 6, Blocks.stone_slab, Blocks.stone_slab, false); this.fillWithBlocks(p_74875_1_, p_74875_3_, 1, 5, 1, 8, 5, 5, Blocks.air, Blocks.air, false); this.fillWithBlocks(p_74875_1_, p_74875_3_, 1, 1, 0, 2, 3, 0, Blocks.iron_block, Blocks.iron_block, false); this.fillWithBlocks(p_74875_1_, p_74875_3_, 0, 1, 0, 0, 4, 0, Blocks.log, Blocks.log, false); this.fillWithBlocks(p_74875_1_, p_74875_3_, 3, 1, 0, 3, 4, 0, Blocks.log, Blocks.log, false); this.fillWithBlocks(p_74875_1_, p_74875_3_, 0, 1, 6, 0, 4, 6, Blocks.log, Blocks.log, false); //指定した相対座標にブロックを設置する this.placeBlockAtCurrentPosition(p_74875_1_, Blocks.iron_block, 0, 3, 3, 1, p_74875_3_); this.fillWithBlocks(p_74875_1_, p_74875_3_, 3, 1, 2, 3, 3, 2, Blocks.iron_block, Blocks.iron_block, false); this.fillWithBlocks(p_74875_1_, p_74875_3_, 4, 1, 3, 5, 3, 3, Blocks.iron_block, Blocks.iron_block, false); this.fillWithBlocks(p_74875_1_, p_74875_3_, 0, 1, 1, 0, 3, 5, Blocks.iron_block, Blocks.iron_block, false); this.fillWithBlocks(p_74875_1_, p_74875_3_, 1, 1, 6, 5, 3, 6, Blocks.iron_block, Blocks.iron_block, false); this.fillWithBlocks(p_74875_1_, p_74875_3_, 5, 1, 0, 5, 3, 0, Blocks.fence, Blocks.fence, false); this.fillWithBlocks(p_74875_1_, p_74875_3_, 9, 1, 0, 9, 3, 0, Blocks.fence, Blocks.fence, false); this.fillWithBlocks(p_74875_1_, p_74875_3_, 6, 1, 4, 9, 4, 6, Blocks.cobblestone, Blocks.cobblestone, false); this.placeBlockAtCurrentPosition(p_74875_1_, Blocks.flowing_lava, 0, 7, 1, 5, p_74875_3_); this.placeBlockAtCurrentPosition(p_74875_1_, Blocks.flowing_lava, 0, 8, 1, 5, p_74875_3_); this.placeBlockAtCurrentPosition(p_74875_1_, Blocks.iron_bars, 0, 9, 2, 5, p_74875_3_); this.placeBlockAtCurrentPosition(p_74875_1_, Blocks.iron_bars, 0, 9, 2, 4, p_74875_3_); this.fillWithBlocks(p_74875_1_, p_74875_3_, 7, 2, 4, 8, 2, 5, Blocks.air, Blocks.air, false); this.placeBlockAtCurrentPosition(p_74875_1_, Blocks.cobblestone, 0, 6, 1, 3, p_74875_3_); this.placeBlockAtCurrentPosition(p_74875_1_, Blocks.furnace, 0, 6, 2, 3, p_74875_3_); this.placeBlockAtCurrentPosition(p_74875_1_, Blocks.furnace, 0, 6, 3, 3, p_74875_3_); this.placeBlockAtCurrentPosition(p_74875_1_, Blocks.double_stone_slab, 0, 8, 1, 1, p_74875_3_); this.placeBlockAtCurrentPosition(p_74875_1_, Blocks.glass_pane, 0, 0, 2, 2, p_74875_3_); this.placeBlockAtCurrentPosition(p_74875_1_, Blocks.glass_pane, 0, 0, 2, 4, p_74875_3_); this.placeBlockAtCurrentPosition(p_74875_1_, Blocks.glass_pane, 0, 2, 2, 6, p_74875_3_); this.placeBlockAtCurrentPosition(p_74875_1_, Blocks.glass_pane, 0, 4, 2, 6, p_74875_3_); this.placeBlockAtCurrentPosition(p_74875_1_, Blocks.fence, 0, 2, 1, 4, p_74875_3_); this.placeBlockAtCurrentPosition(p_74875_1_, Blocks.wooden_pressure_plate, 0, 2, 2, 4, p_74875_3_); this.placeBlockAtCurrentPosition(p_74875_1_, Blocks.iron_block, 0, 1, 1, 5, p_74875_3_); this.placeBlockAtCurrentPosition(p_74875_1_, Blocks.stone_stairs, this.getMetadataWithOffset(Blocks.stone_stairs, 3), 2, 1, 5, p_74875_3_); this.placeBlockAtCurrentPosition(p_74875_1_, Blocks.stone_stairs, this.getMetadataWithOffset(Blocks.stone_stairs, 1), 1, 1, 4, p_74875_3_); int i; int j; if (!this.hasMadeChest) { i = this.getYWithOffset(1); j = this.getXWithOffset(5, 5); int k = this.getZWithOffset(5, 5); if (p_74875_3_.isVecInside(j, i, k)) { this.hasMadeChest = true; this.generateStructureChestContents(p_74875_1_, p_74875_3_, p_74875_2_, 5, 1, 5, ChestGenHooks.getItems(VILLAGE_BLACKSMITH, p_74875_2_), ChestGenHooks.getCount(VILLAGE_BLACKSMITH, p_74875_2_)); } } for (i = 6; i = 8; ++i) { if (this.getBlockAtCurrentPosition(p_74875_1_, i, 0, -1, p_74875_3_).getMaterial() == Material.air this.getBlockAtCurrentPosition(p_74875_1_, i, -1, -1, p_74875_3_).getMaterial() != Material.air) { this.placeBlockAtCurrentPosition(p_74875_1_, Blocks.stone_stairs, this.getMetadataWithOffset(Blocks.stone_stairs, 3), i, 0, -1, p_74875_3_); } } for (i = 0; i 7; ++i) { for (j = 0; j 10; ++j) { this.clearCurrentPositionBlocksUpwards(p_74875_1_, j, 6, i, p_74875_3_); this.func_151554_b(p_74875_1_, Blocks.cobblestone, 0, j, -1, i, p_74875_3_); } } this.spawnVillagers(p_74875_1_, p_74875_3_, 7, 1, 1, 1); return true; } //家に生成させる村人のIDを渡す protected int getVillagerType(int p_74888_1_) { return AluminiumMod.metalVillagerID; } //以下 StructureVillagePieces.Village.House2よりコピペ public static AluminiumHouse func_74915_a(StructureVillagePieces.Start p_74915_0_, List p_74915_1_, Random p_74915_2_, int p_74915_3_, int p_74915_4_, int p_74915_5_, int p_74915_6_, int p_74915_7_) { StructureBoundingBox structureboundingbox = StructureBoundingBox.getComponentToAddBoundingBox(p_74915_3_, p_74915_4_, p_74915_5_, 0, 0, 0, 10, 6, 7, p_74915_6_); return canVillageGoDeeper(structureboundingbox) StructureComponent.findIntersecting(p_74915_1_, structureboundingbox) == null ? new AluminiumHouse(p_74915_0_, p_74915_7_, p_74915_2_, structureboundingbox, p_74915_6_) null; } protected void func_143012_a(NBTTagCompound p_143012_1_) { super.func_143012_a(p_143012_1_); p_143012_1_.setBoolean("Chest", this.hasMadeChest); } protected void func_143011_b(NBTTagCompound p_143011_1_) { super.func_143011_b(p_143011_1_); this.hasMadeChest = p_143011_1_.getBoolean("Chest"); } } 解説 VillagerRegistry void registerVillagerId(int id) 村人のIDを登録するメソッド。 コメントにある通り、村人IDは0~4が既存の村人として設定されているため、それ以外の数値を与える必要がある。 競合を防ぐためには、config等で変更できるようにするとよい。 また、IDはいろいろなところで使うためstatic finalな定数に格納すると便利。 void registerVillageTradeHandler(int villagerId, IVillageTradeHandler handler) 指定したIDの村人に特定の交換を登録するメソッド。 なお、すべての村人(MOD追加されたもの含む)に特定の交換を実装するなら、以下のようなコードが効率的。 (VillagerRegistry.instance().registerVillageTradeHandler(metalVillagerID, new AluminiumTrade());の部分を以下のコードに書き換える。) for(Integer integer VillagerRegistry.getRegisteredVillagers()){ VillagerRegistry.instance().registerVillageTradeHandler(integer, new AluminiumTrade()); } void registerVillagerSkin(int villagerId, ResourceLocation villagerSkin) 指定したIDの村人にスキンを追加するメソッド。 void registerVillageCreationHandler(IVillageCreationHandler handler) 村人の家と村人の生成を登録するメソッド。 MapGenStructureIO ワールドへの構造物生成を管理するクラス。 void registerStructure(Class p_143034_0_, String p_143034_1_) void func_143031_a(Class p_143031_0_, String p_143031_1_) どちらも構造物を登録するメソッド。 registerStructureを先に呼ぶ。 MerchantRecipe これを使ったインスタンスをIVillageTradeHandlerを実装したクラスのmanipulateTradesForVillagerで、第二引数recipeListに追加して村人の交換を管理する。 コンストラクター(ItemStack p_i1942_1_, ItemStack p_i1942_2_) 村人の交換を実装するメソッド。第一引数に渡すもの、第二引数に受け取るものを渡す。 下のコンストラクターを用いてnew MerchantRecipe(p_i1942_1_, (ItemStack)null, p_i1942_2_);と記述するのと同じ意味。 コンストラクター(ItemStack p_i1941_1_, ItemStack p_i1941_2_, ItemStack p_i1941_3_) 村人の交換を実装するメソッド。第一引数・第二引数に渡すもの、第三引数に受け取るものを渡す。 StructureComponent StructureVillagePiecesはこのクラスを継承している。 void fillWithBlocks(World worldObj, StructureBoundingBox structBB, int minX, int minY, int minZ, int maxX, int maxY, int maxZ , Block placeBlock, Block replaceBlock, boolean alwaysreplace) x,y,z(structBBで指定された直方体内の相対座標)座標にブロックを敷き詰める。 min**は始点、max**は終点を示している。また、placeBlockは先に設置するブロック、replaceBlockは後に設置するブロック、(基本同じ物を渡す)、alwaysreplaceはreplaceBlockを使用するか否かを それぞれ示している。 コメント この項目に関する質問などをどうぞ。 名前